package site.ruyi.devclient.client.ftp;

import java.io.Closeable;
import java.util.List;

public interface IFtpClient extends Closeable{

	enum HotKey {
		CTRL_C("Ctrl+C");

		private String showName;

		private HotKey(String showName){
			this.showName=showName;
		}

		public String getShowName(){
			return this.showName;
		}
	}

	@FunctionalInterface
	interface RemoteShellOutputListener{
		void handle(String data);
	}

	/**
	 * 获取客户端名称
	 * @return　客户端名称
	 */
	String getName();

	/**
	 * 初始化客户端连接和布局组件
	 * @param controller
	 */
	boolean init(RemoteShellOutputListener remoteShellOutputListener);

	/**
	 * 执行redis命令
	 * @param cmd　命令
	 * @return　命令结果
	 */
	void exeCmd(String cmd);

	/**
	 * 发送快捷键
	 * @param hotKey
	 */
	void sendHotKey(HotKey hotKey);

	/**
	 * 列出远程当前所在路径
	 * @return
	 */
	String pwd();

	/**
	 * 列出远程文件路径下的文件
	 * @param remotePath 远程路径
	 * @return 远程文件列表
	 */
	List<RemoteFileAttr> listFile(String remotePath);

	/**
	 * 删除远程文件
	 * @param remoteFilePath 远程文件路径
	 * @return 成功返回true,否则返回false
	 */
	void delFile(String filePath,boolean isDir);

	/**
	 * 上传文件
	 * @param localFilePath 本地文件路径
	 * @param remoteFilePath 远程文件路径
	 */
	void upload(String localFilePath,String remoteFilePath);

	/**
	 * 下载文件
	 * @param remotePath 远程文件路径
	 * @param localFilePath 本地文件路径
	 */
	void download(String remoteFilePath,String localFilePath);
}
